home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / prolog / prlgbnch.lha / serialise.pl < prev    next >
Text File  |  1990-05-25  |  864b  |  39 lines

  1. % generated: 17 November 1989
  2. % option(s): 
  3. %
  4. %   serialise
  5. %
  6. %   David H. D. Warren
  7. %
  8. %   itemize (pick a "serial number" for each 
  9. %   unique integer in) a list of 25 integers
  10.  
  11. serialise :- serialise("ABLE WAS I ERE I SAW ELBA",_).
  12.  
  13. serialise(L,R) :-
  14.     pairlists(L,R,A),
  15.     arrange(A,T),
  16.     numbered(T,1,_).
  17.  
  18. pairlists([X|L],[Y|R],[pair(X,Y)|A]) :- pairlists(L,R,A).
  19. pairlists([],[],[]).
  20.  
  21. arrange([X|L],tree(T1,X,T2)) :-
  22.     split(L,X,L1,L2),
  23.     arrange(L1,T1),
  24.     arrange(L2,T2).
  25. arrange([],void).
  26.  
  27. split([X|L],X,L1,L2) :- !, split(L,X,L1,L2).
  28. split([X|L],Y,[X|L1],L2) :- before(X,Y), !, split(L,Y,L1,L2).
  29. split([X|L],Y,L1,[X|L2]) :- before(Y,X), !, split(L,Y,L1,L2).
  30. split([],_,[],[]).
  31.  
  32. before(pair(X1,_),pair(X2,_)) :- X1 < X2.
  33.  
  34. numbered(tree(T1,pair(_,N1),T2),N0,N) :-
  35.     numbered(T1,N0,N1),
  36.     N2 is N1+1,
  37.     numbered(T2,N2,N).
  38. numbered(void,N,N).
  39.